package exception;

/**
 *
 * java异常处理机制
 * java中所有错误的超类为:Throwable.其下有两个子类:Error和Exception
 * Error的子类描述的都是系统错误,比如虚拟机内存溢出等
 * Exception的子类描述的都是程序错误,比如空指针,下表越界等
 * 通常我们程序中处理的异常都是Exception
 *
 * java中有完善的异常处理机制.格式为:
 * try{
 *     代码片段
 * }catch(XXXException e){
 *     处理try中出现的Exception代码
 * }
 */

public class TryCatchDemo {
    public static void main(String[] args) {
        System.out.println("程序开始了!" );
        try {
      //      String str = null;
            String str = "a";
            //当JVM执行代码出现错误时,就会实例化对应问题的异常实例,并设置出错位置后将其抛出
            System.out.println(str.length());//当str为null时,会抛出空指针异常
            System.out.println(str.charAt(1));//当下标超范围时会抛出下标越界异常
            System.out.println(Integer.parseInt(str));
            //try语句块中报错代码以下的内容均不执行!
            System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
        }catch(NullPointerException e){
            //定义try中出现空指针异常后的解决办法
            System.out.println("出现了空指针!");
            //catch 可以定义多个,针对try中不同异常有不同处理方式时可以分别捕获并处理
        }catch(StringIndexOutOfBoundsException e){
            //定义try中出现空指针异常后的解决办法
            System.out.println("字符串下标越界");
            /*
            通常以下情况我们可以捕获一个超类异常:
            1:当try中出现了几种不同的异常,但是他们的解决办法相同时,我们可以catch他们共同的超类异常即可
            2:在最后一个catch处捕获Exception可以避免因为一个未处理的异常导致程序中断
             */
        }catch(Exception e){
            System.out.println("程序出错");
        }
        System.out.println("程序结束了!");
    }
}
